/**
 * 类默认有构造方法，方法名和类名一样，只是隐藏起来了，形式如下：
 * public Constructor() {
 *      默认没有内容
 * }
 * 怎么验证呢，可以直接编译这个空类，或者运行，idea自动帮我们编译，在out目录里查看看编译后的class文件
 * 在out目录打开.class文件，idea自动帮我们反编译
 *
 * 每个类必须有构造方法，只有调用这个方法才能创建类对象
 * Test test = new Test()；// Test()就是Test类的构造方法
 *
 * 类对象在创建的时候，首先会完成成员变量默认值的赋值，然后再调用构造方法。成员变量的初始化始终在执行构造方法之前
 */

public class Constructor {
    String name = "淦";

    //类要在一开始准备的所有东西，都会在构造方法里面执行。完成构造方法的内容后，才能创建出对象
    Constructor(){  //这个构造方法没有写public，只能在类里面调用
        System.out.println(name);
    }
    //下面这个是构造方法的重载
    Constructor(String name){  //也可以对构造方法重载，条件和重载普通方法一样，形参不同，不要写返回值
        this.name = name;  //当形参变量名和类成员变量名一样时，优先使用形参变量名，跟类对象成员变量没关系了
        // 如果想使用当前类对象的变量名，就要使用this来表示使用的是当前对象的名字，this.name指的是对象的变量，=后面的是构造方法传入的形参变量
    }

    String a(){
        return this.name;  //只要是对象，可以用this
    }

    /**
     * Static String b(){  //this只能在当前用于指代当前对象的内容，因此只有属于对象引用的部分才能使用this。
     * //即只能在类的成员方法中使用this，不能在静态方法中使用this，静态方法是类的变量，
     *         return this.name;
     *     }
     *
     * 在我们定义了有参构造后，默认的无参构造会被覆盖，可以反编译下看看
     * 如果同时需要无参构造和有参构造，就要用方法的重载
     */

}
